package com.lancoo.answer.util;

import android.annotation.SuppressLint;

import androidx.annotation.NonNull;

import java.util.concurrent.TimeUnit;

import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Consumer;
import io.reactivex.functions.Function;
import io.reactivex.schedulers.Schedulers;

public class TimerUtil {
    private static Disposable disposable;

    @SuppressLint("CheckResult")
    public static void startCount(int count,IcountTimer icountTimer){
        disposable  = Observable.interval(0,1,TimeUnit.SECONDS)
                .take(count)
                .map(new Function<Long, Long>() {
                    @Override
                    public Long apply(@NonNull Long i) throws Exception {
                        return count -i;
                    }
                })
                .subscribeOn(Schedulers.computation())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Consumer<Long>() {
                    @Override
                    public void accept(Long aLong) throws Exception {
//                        Log.e("aaaa","倒计时中："+aLong);
                        if (icountTimer!=null) icountTimer.onCountdown(aLong);
                    }
                });
//        Observable.interval(0, 1, TimeUnit.SECONDS)//设置0延迟，每隔一秒发送一条数据
//                .take((int) (3)) //设置总共发送的次数
//                .map(new Func1<Long, Long>() {//long 值是从小到大，倒计时需要将值倒置
//                    @Override
//                    public Long call(Long aLong) {
//                        return 3 - aLong;
//                    }
//                })
//                .subscribeOn(Schedulers.computation())
//                // doOnSubscribe 执行线程由下游逻辑最近的 subscribeOn() 控制，下游没有 subscribeOn() 则跟Subscriber 在同一线程执行
//                //执行计时任务前先将 button 设置为不可点击
//                .doOnSubscribe(new Action0() {
//                    @Override
//                    public void call() {
//                        mStart.setEnabled(false);//在发送数据的时候设置为不能点击
//                        mStart.setBackgroundColor(Color.GRAY);//背景色设为灰色
//                    }
//                })
//                .observeOn(AndroidSchedulers.mainThread())//操作UI主要在UI线程
//                .subscribe(new Subscriber<Long>() {
//                    @Override
//                    public void onCompleted() {
//                    }
//
//                    @Override
//                    public void onError(Throwable e) {
//                        e.printStackTrace();
//                    }
//
//                    @Override
//                    public void onNext(Long aLong) { //接收到一条就是会操作一次UI
//                        String value = String.valueOf(aLong);
//                    }
//                });

    }


    public static void pauseCount(){
        if (disposable!=null){
            disposable.dispose();
        }
    }


    public static void clear(){
        if (disposable!=null){
            disposable.dispose();
        }
    }


    public interface IcountTimer{
        void onCountdown(Long l);
    }


}
